package secondStage.part4.字符流.复制文件夹;

import java.io.*;

/**
 * @ClassName: [CopyFolderDemo]
 * @Description: 复制文件夹：单级文件夹（该文件夹内只有文件，没有其他文件夹）
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-05]
 * @Version: [v1.0]
 */
/*
需求:
    把F:\JavaBaseStudy这个文件夹复制到F:\Videos下
思路:
    1:创建数据源目录File对象，路径是F:\JavaBaseStudy
    2:获取数据源目录File对象的名称(javaBaseStudy)
    3:创建目的地目录File对象，路径名是F:\Videos+javaBaseStudy组成(F:\Videos\javaBaseStudy)
    4:判断目的地目录对应的File是否存在，如果不存在，就创建
    5:获取数据源目录下所有文件的File数组
    6:遍历File数组，得到每一个File对象，该File对象，其实就是数据源文件
        数据源文件: F:\JavaBaseStudy\123.jpg
    7:获取数据源文件File对象的名称(123.jpg)
    8:创建目的地文件File对象，路径名是目的地目录+123.jpg组成(F:\Videos\javaBaseStudy\123.jpg)
    9:复制文件
        由于文件不仅仅是文本文件，还有图片，视频等文件，所以采用字节流复制文件
 */
public class CopyFolderDemo {
    public static void main(String[] args) throws IOException {
        // 1:创建数据源目录File对象，路径是F:\JavaBaseStudy
        File srcFolder = new File("F:\\JavaBaseStudy");
        // 2:获取数据源目录File对象的名称(javaBaseStudy)
        String srcFolderName = srcFolder.getName();
        // 3:创建目的地目录File对象，路径名是F:\Videos+javaBaseStudy组成(F:\Videos\javaBaseStudy)
        File destFolder = new File("F:\\Videos", srcFolderName);
        // 4:判断目的地目录对应的File是否存在，如果不存在，就创建
        if (!destFolder.exists()){
            destFolder.mkdir();
        }
        // 5:获取数据源目录下所有文件的File数组
        File[] listFiles = srcFolder.listFiles();
        // 6:遍历File数组，得到每一个File对象，该File对象，其实就是数据源文件,
        for (File srcFile: listFiles) {
            // 数据源文件: F:\JavaBaseStudy\123.jpg
            //获取数据源文件File对象的名称：123.jpg
            String srcFileName = srcFile.getName();
            // 8:创建目的地文件File对象，路径名是目的地目录+123.jpg组成(F:\Videos\javaBaseStudy\123.jpg)
            File destFile = new File(destFolder, srcFileName);
            //复制文件
            copyFile(srcFile,destFile);
        }
    }
    public static void copyFile(File srcFile,File destFile) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream(destFile));

        byte[] bys = new byte[1024];
        int len;
        while ((len=bis.read(bys))!=-1){
            bos.write(bys,0,len);
        }
        bos.close();
        bis.close();
    }
}
